package com.cskaoyan.service.admin;

import com.cskaoyan.bean.BasePageInfo;
import com.cskaoyan.bean.MarketRole;
import com.cskaoyan.bean.param.CommonData;
import com.cskaoyan.bean.vo.role.PermissionListVO;
import com.cskaoyan.bean.vo.role.RoleOptionsVO;
import com.cskaoyan.bean.vo.role.UpdatePermissionPO;

public interface AdminRoleService {
    /**
     * 查询所有的role，封装到VO
     *
     * @return com.cskaoyan.bean.param.CommonData<com.cskaoyan.bean.vo.role.RoleOptionsVO>
     * @author Bowen Deng
     * @since 2022/06/27 4:03 下午
     */
    CommonData<RoleOptionsVO> listRoleOptions();

    /**
     * 查询所有的role
     *
     * @param info
     * @return com.cskaoyan.bean.param.CommonData<com.cskaoyan.bean.MarketRole>
     * @author Bowen Deng
     * @since 2022/06/27 7:40 下午
     */
    CommonData<MarketRole> listAllRoles(String name, BasePageInfo info);

    /**
     * 添加role的请求，前端传过来的参数不用判空，也没有什么命名要求，所以只需要查询与数据库里的name是否重复
     * 重复返回100，插入成功返回1，插入失败返回0，数据库错误
     *
     * @param role
     * @return java.lang.Integer
     * @author Bowen Deng
     * @since 2022/06/27 8:01 下午
     */
    Integer addRole(MarketRole role);

    /**
     * 更新role的请求，前端传过来的参数不用判空，也没有什么命名要求，所以只需要查询与数据库里的name是否重复
     * 重复返回100，更新成功返回1，更新失败返回0，数据库错误
     *
     * @param role
     * @return java.lang.Integer
     * @author Bowen Deng
     * @since 2022/06/27 8:22 下午
     */
    Integer updateRole(MarketRole role);

    /**
     * 根据deleted判断是否可以删除
     * true可以删除就直接删除，false不可以删除返回100
     *
     * @param role
     * @return java.lang.Integer
     * @author Bowen Deng
     * @since 2022/06/27 8:29 下午
     */
    Integer deleteRole(MarketRole role);

    /**
     * 根据名字查询Role,因为create方法需要回显
     *
     * @param name
     * @return com.cskaoyan.bean.MarketRole
     * @author Bowen Deng
     * @since 2022/06/27 8:36 下午
     */
    MarketRole selectRoleByName(String name);

    /**
     * 极致的套娃，极致的封装，极致的冗余
     *
     * @param roleId
     * @return com.cskaoyan.bean.vo.role.PermissionListVO
     * @author Bowen Deng
     * @since 2022/06/27 11:34 下午
     */
    PermissionListVO getPermissions(String roleId);

    /**
     * 直接根据前端发过来的String类型的数组更新表
     *
     * @param update
     * @return java.lang.Integer
     * @author Bowen Deng
     * @since 2022/06/28 9:03 上午
     */
    Integer updatePermissions(UpdatePermissionPO update);
}
